Temporal Tables এবং Data Versioning হল SQL Server এর একটি শক্তিশালী বৈশিষ্ট্য যা আপনাকে ডেটাবেসে সংরক্ষিত ডেটার ইতিহাস ট্র্যাক করতে এবং অতীতের ডেটা স্টেটসমূহ পুনরুদ্ধার করতে সাহায্য করে। SQL Server 2016 এবং তার পরবর্তী সংস্করণে Temporal Tables এর মাধ্যমে আপনি সহজেই system-versioned tables তৈরি করতে পারেন, যা স্বয়ংক্রিয়ভাবে ডেটার পরিবর্তন এবং সময়কাল সংরক্ষণ করে।
এই টিউটোরিয়ালে আমরা Temporal Tables এবং Data Versioning এর মৌলিক ধারণা, ব্যবহার এবং উপকারিতা নিয়ে বিস্তারিত আলোচনা করব।
1. Temporal Tables কী?
Temporal Tables (যাকে System-Versioned Temporal Tables বলা হয়) একটি বিশেষ ধরনের টেবিল, যেখানে প্রতিটি রেকর্ডের জন্য কার্যকর সময়কাল (Valid Time Period) এবং রেকর্ডের পরিবর্তনগুলির তারিখ এবং সময় সংরক্ষিত থাকে। এটি History Tracking বা Data Versioning এর জন্য ব্যবহার করা হয়, যাতে আপনি যে কোনো সময়ের মধ্যে ডেটা পুনরুদ্ধার করতে পারেন।
এই টেবিলগুলো current data (বর্তমান ডেটা) এবং historical data (ইতিহাসের ডেটা) পৃথকভাবে সংরক্ষণ করতে সহায়তা করে।
1.1. Temporal Tables এর উপকারিতা:
- Data History Management: এটি আপনাকে ডেটার সমস্ত সংস্করণের ইতিহাস সংরক্ষণ এবং পর্যালোচনা করার সুযোগ দেয়।
- Easy Data Auditing: কোনো রেকর্ড কখন এবং কীভাবে পরিবর্তিত হয়েছে তা ট্র্যাক করতে সক্ষম হোন।
- Efficient Data Retrieval: আপনি ডেটার পুরনো সংস্করণ দ্রুত পুনরুদ্ধার করতে পারেন, যা ঐতিহাসিক ডেটা বিশ্লেষণে সাহায্য করে।
2. Temporal Tables তৈরি করা
SQL Server এ Temporal Table তৈরি করতে হলে আপনাকে দুইটি টেবিল ব্যবহার করতে হবে:
- Main Table (Current data table)
- History Table (Historical data table)
2.1. Temporal Table তৈরি করার ধাপ
ধরা যাক, আপনি একটি Employees টেবিল তৈরি করতে চান যা Temporal Table হবে, এবং আপনি কর্মীদের তথ্যের পরিবর্তন ইতিহাস রাখতে চান। এ জন্য, আপনাকে নিম্নলিখিত পদক্ষেপ অনুসরণ করতে হবে:
2.2. Step-by-Step Example
- Main Table (Current Data): প্রথমে একটি সাধারণ টেবিল তৈরি করুন যেটি বর্তমান ডেটা ধারণ করবে। এই টেবিলে দুটি অতিরিক্ত কলাম থাকবে:
- ValidFrom: এই রেকর্ডটি কখন থেকে কার্যকর হয়েছিল।
- ValidTo: এই রেকর্ডটি কখন পর্যন্ত কার্যকর থাকবে।
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY,
EmployeeName NVARCHAR(100),
Position NVARCHAR(100),
Salary DECIMAL(10, 2),
ValidFrom DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
ValidTo DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.EmployeeHistory));
- History Table (Historical Data): SQL Server স্বয়ংক্রিয়ভাবে একটি History Table তৈরি করবে, যার নাম
EmployeeHistoryহবে (যদি আপনি সেটি নির্দিষ্ট না করেন)। এই টেবিলটি সমস্ত পুরনো রেকর্ড এবং তাদের পরিবর্তন ইতিহাস সংরক্ষণ করবে।
এখানে:
- SYSTEM_VERSIONING নির্দেশ দেয় যে টেবিলটি Temporal Table।
- HISTORY_TABLE নির্দেশ করে যে আপনি কোথায় ঐতিহাসিক ডেটা সংরক্ষণ করতে চান।
3. Temporal Tables এর মাধ্যমে Data Versioning
Data Versioning হল একটি প্রক্রিয়া যেখানে ডেটাবেসের বিভিন্ন সংস্করণ রাখা হয়, এবং আপনি যেকোনো সময়ের ডেটা সংস্করণ পুনরুদ্ধার করতে পারেন। Temporal Tables এর মাধ্যমে SQL Server এ automatic data versioning সম্ভব হয়।
3.1. Data Versioning এর প্রক্রিয়া:
- যখন কোনো রেকর্ড আপডেট বা ডিলিট হয়, তখন পুরনো ডেটা ঐতিহাসিক টেবিলে সংরক্ষণ করা হয়, এবং নতুন ডেটা মূল টেবিলে আপডেট হয়।
- ValidFrom এবং ValidTo কলামগুলো নির্দিষ্ট সময়কালের জন্য রেকর্ডের কার্যকারিতা নির্দেশ করে।
- ডেটা আপডেট হলে, ValidTo কলামের মান বর্তমান তারিখ এবং সময় হবে, এবং ValidFrom কলাম নতুন রেকর্ডে বর্তমান সময় হবে।
3.2. Historical Data পুনরুদ্ধার:
আপনি ঐতিহাসিক ডেটা দেখতে FOR SYSTEM_TIME ক্লজ ব্যবহার করতে পারেন। এটি আপনাকে পূর্ববর্তী সময়ের ডেটা বা নির্দিষ্ট সময়ের মধ্যে ডেটা দেখার সুযোগ দেয়।
উদাহরণ:
যদি আপনি একটি নির্দিষ্ট সময়কালে (যেমন ২০২৩ সালের ১ জানুয়ারি) Employees টেবিলের ডেটা দেখতে চান, তাহলে কুয়েরি হবে:
SELECT *
FROM Employees
FOR SYSTEM_TIME AS OF '2023-01-01 00:00:00'
WHERE EmployeeID = 101;
এই কুয়েরি ঐতিহাসিক ডেটাবেস থেকে ২০২৩ সালের ১ জানুয়ারি ১২:০০ AM এর সময়ের মধ্যে EmployeeID 101 এর ডেটা ফেরত দিবে।
3.3. Time Period Based Data Query:
আপনি ঐতিহাসিক ডেটা একটি নির্দিষ্ট সময়সীমার মধ্যে দেখতে চাইলে FOR SYSTEM_TIME BETWEEN ব্যবহার করতে পারেন।
SELECT *
FROM Employees
FOR SYSTEM_TIME BETWEEN '2023-01-01 00:00:00' AND '2023-12-31 23:59:59'
WHERE Position = 'Manager';
এই কুয়েরি ২০২৩ সালে Manager পদের সকল কর্মচারীর ইতিহাস দেখাবে।
4. Temporal Tables এর ব্যবহার ক্ষেত্র
Temporal Tables ব্যবহার করা হয় এমন পরিস্থিতিতে যেখানে ডেটার পরিবর্তন এবং ঐতিহাসিক ট্র্যাকিং প্রয়োজন, যেমন:
- Audit Trail: অ্যাপ্লিকেশনগুলিতে যখন ডেটার পরিবর্তন এবং পরিবর্তনগুলোকে ট্র্যাক করা প্রয়োজন।
- Data Recovery: যখন ডেটাবেস থেকে হারানো বা ভুল ডেটা পুনরুদ্ধার করতে হয়।
- Compliance: বিশেষত স্বাস্থ্যসেবা বা ব্যাংকিং সেক্টরে যেখানে ডেটার ইতিহাস সংরক্ষণ ও রিভিউ করা প্রয়োজন।
সারাংশ
Temporal Tables SQL Server এ ডেটা ট্র্যাকিং এবং Data Versioning এর জন্য একটি শক্তিশালী বৈশিষ্ট্য। এটি ডেটার পরিবর্তন ইতিহাস সংরক্ষণ করে এবং সময়ভিত্তিক ডেটা পুনরুদ্ধার করতে সাহায্য করে। SYSTEM_VERSIONING এর মাধ্যমে SQL Server স্বয়ংক্রিয়ভাবে ডেটার পরিবর্তন ইতিহাস সংরক্ষণ করে, যা অডিট ট্রেইল এবং ডেটা রিকভারি প্রক্রিয়ায় অত্যন্ত কার্যকর।
Temporal Tables হল SQL Server 2016 এবং তার পরবর্তী সংস্করণে পরিচিত একটি বৈশিষ্ট্য, যা ডেটাবেসে ডেটার ইতিহাস ট্র্যাক করতে সাহায্য করে। এটি একটি বিশেষ ধরনের টেবিল যেখানে একটি ডেটাবেস রেকর্ডের পরিবর্তনশীল ইতিহাস সংরক্ষণ করা হয়, যাতে আপনি পূর্ববর্তী ডেটা এবং তার সংশোধনগুলির পরিবর্তনশীলতা ট্র্যাক করতে পারেন। সাধারণত, এই ধরনের টেবিল ব্যবহৃত হয় যখন ডেটার ইতিহাস বা পরিবর্তন ব্যবস্থাপনা গুরুত্বপূর্ণ, যেমন কাস্টমার অ্যাকাউন্ট, ফাইনান্সিয়াল রেকর্ডস, বা আইনগত ডেটা।
Temporal Tables কে কখনো কখনো System-Versioned Temporal Tables বলা হয়। এটি দুটি মূল অংশে বিভক্ত:
- Current Data: বর্তমানে সক্রিয় ডেটা, যা সাধারণত অ্যাপ্লিকেশনের জন্য দৃশ্যমান।
- Historical Data: পূর্ববর্তী সময়ে পরিবর্তিত ডেটার ইতিহাস।
1. Temporal Table কী? (What is a Temporal Table?)
Temporal Table SQL Server তে এমন একটি টেবিল, যা স্বয়ংক্রিয়ভাবে ডেটার ইতিহাস বজায় রাখে। এতে দুটি অংশ থাকে:
- Main Table (Current Table): যেখানে বর্তমান সক্রিয় ডেটা রাখা হয়।
- History Table: যেখানে পুরোনো ডেটা (যেমন, আপডেট বা ডিলিট হওয়া রেকর্ড) সিস্টেম দ্বারা সংরক্ষণ করা হয়।
প্রতি সময় যখন ডেটা আপডেট বা ডিলিট হয়, তখন SQL Server ঐ রেকর্ডটি স্বয়ংক্রিয়ভাবে History Table এ সেভ করে দেয়। এর ফলে, আপনি পূর্বের রেকর্ডগুলি দেখতে এবং পুনরুদ্ধার করতে পারেন, যার মাধ্যমে ডেটার পূর্ববর্তী অবস্থা পুনরুদ্ধার করা সহজ হয়।
2. Temporal Table এর মূল বৈশিষ্ট্যসমূহ (Key Features of Temporal Tables)
2.1. স্বয়ংক্রিয় ইতিহাস সংরক্ষণ (Automatic History Tracking)
Temporal Tables স্বয়ংক্রিয়ভাবে আপনার ডেটাবেসে পরিবর্তিত ডেটার ইতিহাস সংরক্ষণ করে। যখন ডেটা আপডেট বা ডিলিট হয়, তখন পুরোনো রেকর্ডটি History Table এ সেভ হয়ে যায়, এবং বর্তমান রেকর্ডটি valid time period সহ Main Table এ থাকে।
2.2. Time-Period Based Queries
এটি ব্যবহারকারীদের time-based queries চালানোর সুযোগ দেয়। আপনি নির্দিষ্ট সময়ের মধ্যে ডেটার অবস্থা জানতে পারেন, যেমনঃ
- কোন একটি রেকর্ডটি কবে আপডেট বা ডিলিট হয়েছিল?
- কোন নির্দিষ্ট সময়ের মধ্যে কী কী পরিবর্তন হয়েছে?
2.3. Simplified Data Auditing and Compliance
ডেটার ইতিহাস ট্র্যাক করা এবং পরিবর্তনগুলো অডিট করা সহজ হয়। এটি compliance এবং audit প্রয়োজনীয়তার জন্য খুবই কার্যকরী, যেমন ফাইনান্সিয়াল বা আইনি ডেটার ক্ষেত্রে।
2.4. System-Versioned
Temporal Tables system-versioned হয়, যার মানে হল যে SQL Server স্বয়ংক্রিয়ভাবে টেবিলের রেকর্ডের পরিবর্তনের সময়কালের (validity period) লগ রাখে, এবং এটি সময়ের সাথে পরিবর্তিত ডেটা সংরক্ষণ করে।
3. Temporal Table কিভাবে কাজ করে? (How Do Temporal Tables Work?)
Temporal Table এর কার্যপদ্ধতি তিনটি প্রধান উপাদান নিয়ে গঠিত:
- Main Table: এটি বর্তমান সক্রিয় ডেটা ধারণ করে। প্রতিটি রেকর্ডে দুটি অতিরিক্ত কলাম থাকে:
SysStartTime: রেকর্ডটির বৈধতার শুরু সময়।SysEndTime: রেকর্ডটির বৈধতার শেষ সময়।
- History Table: এটি History Data ধারণ করে, অর্থাৎ সমস্ত পরিবর্তিত বা মুছে ফেলা রেকর্ড সংরক্ষণ করে। এখানে
SysStartTimeএবংSysEndTimeকলামগুলো থাকে যা Time Period এর মধ্যে ডেটার অবস্থান নির্দেশ করে। - System-Versioning: SQL Server System-Versioning এর মাধ্যমে ডেটার
valid period(শুরুর এবং শেষ সময়) ট্র্যাক করে। এটি স্বয়ংক্রিয়ভাবে প্রতিটি রেকর্ডের জন্যstartএবংendটাইমের মান সেট করে।
4. Temporal Table তৈরি করা (Creating a Temporal Table)
Temporal Table তৈরি করতে, আপনাকে দুটি জিনিস নিশ্চিত করতে হবে:
- Main Table তৈরি করুন।
- History Table তৈরি করুন (SQL Server নিজেই তৈরি করবে যদি আপনি সঠিক কনফিগারেশন দেন)।
4.1. Main Table তৈরি করা (Creating the Main Table)
CREATE TABLE Employee (
EmployeeID INT PRIMARY KEY,
Name NVARCHAR(100),
Position NVARCHAR(100),
Salary DECIMAL(10, 2),
SysStartTime DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN,
SysEndTime DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN,
PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime)
);
এখানে, SysStartTime এবং SysEndTime হল দুটি নতুন কলাম যা SQL Server স্বয়ংক্রিয়ভাবে তৈরি করবে এবং সময়কালের মধ্যে রেকর্ডের স্থিতি নির্ধারণ করবে।
4.2. History Table তৈরি করা (Creating the History Table)
SQL Server এ History Table তৈরি করার জন্য আপনাকে WITH (SYSTEM_VERSIONING = ON) ফিচারটি সক্রিয় করতে হবে:
CREATE TABLE EmployeeHistory (
EmployeeID INT,
Name NVARCHAR(100),
Position NVARCHAR(100),
Salary DECIMAL(10, 2),
SysStartTime DATETIME2,
SysEndTime DATETIME2
);
ALTER TABLE Employee
ADD CONSTRAINT DF_Employee_SysStartTime DEFAULT SYSUTCDATETIME() FOR SysStartTime,
CONSTRAINT DF_Employee_SysEndTime DEFAULT '9999-12-31 23:59:59.9999999' FOR SysEndTime;
ALTER TABLE Employee
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.EmployeeHistory));
এটি Employee টেবিলের ইতিহাস সংরক্ষণের জন্য EmployeeHistory টেবিল তৈরি করবে এবং SYSTEM_VERSIONING ফিচারটি চালু করবে।
5. Temporal Table ব্যবহার করে Queries (Queries using Temporal Tables)
5.1. বর্তমান ডেটা দেখানো (Querying Current Data)
SELECT EmployeeID, Name, Position, Salary
FROM Employee;
5.2. একটি নির্দিষ্ট সময়ের মধ্যে ডেটা দেখা (Querying Historical Data for a Specific Time)
SELECT EmployeeID, Name, Position, Salary, SysStartTime, SysEndTime
FROM Employee
FOR SYSTEM_TIME AS OF '2023-01-01 12:00:00';
এটি আপনাকে ২০২৩ সালের ১ জানুয়ারি ১২:০০:০০ সময়ে Employee টেবিলের অবস্থা দেখাবে।
5.3. ডেটার পরিবর্তন ইতিহাস দেখা (Querying the Changes in Data)
SELECT EmployeeID, Name, Position, Salary, SysStartTime, SysEndTime
FROM Employee
FOR SYSTEM_TIME BETWEEN '2023-01-01' AND '2023-12-31';
এটি ২০২৩ সালের মধ্যে Employee টেবিলের সমস্ত পরিবর্তনগুলো দেখাবে।
6. Temporal Table এর সুবিধা এবং ব্যবহার
6.1. ডেটার ইতিহাস ট্র্যাকিং
এটি ডেটার পরিবর্তনের ইতিহাস রেকর্ড করতে এবং পুনরুদ্ধার করতে সাহায্য করে।
6.2. ডেটাবেস অডিটিং
অডিটিংয়ের জন্য খুবই কার্যকরী, কারণ এটি সমস্ত পরিবর্তন এবং তার সময়ের স্ট্যাম্প সংরক্ষণ করে।
6.3. রিপোর্টিং এবং কমপ্লায়েন্স
আইনি বা ফাইনান্সিয়াল রিপোর্ট তৈরির সময় আগের ডেটা দেখা সহজ হয়, যা কমপ্লায়েন্স ফিচারের জন্য গুরুত্বপূর্ণ।
সারাংশ
Temporal Tables SQL Server-এ ডেটার ইতিহাস বজায় রাখার একটি শক্তিশালী ফিচার, যা ডেটার পরিবর্তনশীলতাকে ট্র্যাক করতে এবং পূর্ববর্তী সময়ের ডেটা পুনরুদ্ধারে সাহায্য করে। এটি ডেটাবেসের জন্য একটি গুরুত্বপূর্ণ টুল, বিশেষ করে যেখানে ডেটার ইতিহাস বা অডিট প্রয়োজনীয়তা গুরুত্বপূর্ণ।
Temporal Tables SQL Server 2016 থেকে একটি গুরুত্বপূর্ণ ফিচার হিসেবে যুক্ত করা হয়েছে, যা System-Versioned টেবিলের একটি ধরনের। এটি ডেটাবেসের ডেটার ইতিহাস ট্র্যাক করতে এবং পূর্ববর্তী ডেটা পুনরুদ্ধার করতে সাহায্য করে। Temporal Table এর মাধ্যমে আপনি নির্দিষ্ট সময়ের মধ্যে ডেটার পরিবর্তন ইতিহাস সংরক্ষণ করতে পারবেন এবং সেগুলি সহজেই রিট্রিভ করতে পারবেন।
Temporal Table ডেটাবেসের একটি ধরনের টেবিল যা Historical Data সংরক্ষণ করে এবং আপনাকে সময়ের নির্দিষ্ট পয়েন্টে টেবিলের কনটেন্ট দেখতে বা পুনরুদ্ধার করতে সক্ষম করে।
1. Temporal Table কী? (What is a Temporal Table?)
Temporal Table এমন একটি টেবিল যা ডেটার পরিবর্তন ইতিহাস স্বয়ংক্রিয়ভাবে সংরক্ষণ করে। এটি আপনাকে Point-in-time এ ডেটার অবস্থা দেখতে দেয় এবং পূর্ববর্তী ডেটা পুনরুদ্ধার করতে সহায়তা করে। SQL Server একটি System-Versioned Temporal Table তৈরি করতে সক্ষম, যা দুইটি টেবিল ব্যবহার করে:
- Current Table: যেখানে বর্তমান ডেটা সংরক্ষিত থাকে।
- History Table: যেখানে ডেটার পূর্ববর্তী সংস্করণগুলি সংরক্ষিত থাকে।
Temporal Table এর সাথে একটি গুরুত্বপূর্ণ অংশ হলো Period Columns, যেগুলি ডেটার সৃষ্টির সময় এবং শেষ সময়ের মধ্যে একটি Time Interval প্রদর্শন করে।
2. Temporal Table এর উপাদানসমূহ (Components of Temporal Table)
Temporal Table এর তিনটি প্রধান উপাদান রয়েছে:
- Valid From: ডেটা রেকর্ডের কার্যকরী শুরু সময়।
- Valid To: ডেটা রেকর্ডের কার্যকরী শেষ সময়।
- History Table: যেখানে সমস্ত সময়ভিত্তিক পরিবর্তন এবং ইতিহাস সংরক্ষিত হয়।
এই তিনটি উপাদান একসাথে কাজ করে ডেটার অতীত এবং বর্তমান সংস্করণকে পৃথক করতে এবং ট্র্যাক করতে।
3. Temporal Table তৈরি করা (Creating Temporal Table)
SQL Server-এ Temporal Table তৈরি করার জন্য, আপনাকে Period Columns এবং History Table কনফিগার করতে হবে। Temporal Table-এর জন্য PERIOD keyword ব্যবহার করতে হয়, যা Valid From এবং Valid To সময় সীমা সঠিকভাবে সংজ্ঞায়িত করে।
3.1. সাধারণ Temporal Table তৈরি করা (Creating a Basic Temporal Table)
ধরা যাক, আপনি একটি Employee টেবিল তৈরি করতে চান, যেখানে কর্মীদের বর্তমান এবং ইতিহাস সংরক্ষণ করা হবে।
CREATE TABLE Employee
(
EmployeeID INT PRIMARY KEY,
Name NVARCHAR(100),
Position NVARCHAR(100),
Salary DECIMAL(18, 2),
ValidFrom DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN,
ValidTo DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN,
PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.EmployeeHistory));
- Employee টেবিলের মধ্যে
ValidFromএবংValidToদুটি DATETIME2 কলাম তৈরি করা হয়েছে, যা সময় সীমা সংরক্ষণ করে। - PERIOD FOR SYSTEM_TIME নির্দেশ করে যে এই টেবিলটি একটি System-Versioned Temporal Table।
- SYSTEM_VERSIONING = ON নির্দেশ করে যে ডেটা পরিবর্তনের সাথে সাথে এটি একটি History Table এ সংরক্ষণ করবে।
এখানে EmployeeHistory টেবিলটি ঐতিহাসিক ডেটা সংরক্ষণ করবে, যা সিস্টেমের পরিবর্তন ইতিহাস দেখাবে।
3.2. History Table কনফিগার করা (Configuring History Table)
আপনার সিস্টেমটি যদি নিজস্ব History Table কনফিগার না করে, তাহলে SQL Server ডিফল্টভাবে একটি History Table তৈরি করবে। তবে আপনি চাইলে History Table কাস্টমাইজও করতে পারেন।
উপরের উদাহরণে, আমরা dbo.EmployeeHistory নামে একটি কাস্টম History Table তৈরি করেছি। এটি ঐতিহাসিক ডেটা সংরক্ষণ করবে।
4. Temporal Table ব্যবহার করা (Using Temporal Table)
4.1. ডেটা ইনসার্ট করা (Inserting Data)
এখন আপনি আপনার Employee টেবিলের মধ্যে ডেটা ইনসার্ট করতে পারেন:
INSERT INTO Employee (EmployeeID, Name, Position, Salary)
VALUES (1, 'John Doe', 'Manager', 60000);
এই ইনসার্ট করার পর, ValidFrom কলামে বর্তমান সময় এবং ValidTo কলামে একটি সন্নিহিত সর্বোচ্চ সময় (যেমন '9999-12-31') সংরক্ষিত হবে।
4.2. ডেটা আপডেট করা (Updating Data)
যখন আপনি Employee টেবিলের কোনো রেকর্ড আপডেট করবেন, তখন SQL Server ঐতিহাসিক ডেটা History Table এ সংরক্ষণ করবে এবং নতুন রেকর্ডটিকে বর্তমান টেবিলে আপডেট করবে:
UPDATE Employee
SET Salary = 65000
WHERE EmployeeID = 1;
এই আপডেটের পর:
- পুরনো রেকর্ডটি EmployeeHistory টেবিলে চলে যাবে, যেখানে
ValidToকলামে আপডেটের সময় থাকবে। - নতুন আপডেট হওয়া রেকর্ডটির
ValidFromহবে বর্তমান সময় এবংValidToথাকবে সর্বোচ্চ সময়।
4.3. ডেটা দেখতে (Querying Data)
বর্তমান ডেটা এবং ইতিহাসের ডেটা দেখতে, আপনি FOR SYSTEM_TIME স্টেটমেন্ট ব্যবহার করতে পারেন। এটি আপনাকে নির্দিষ্ট সময় পয়েন্টে বা সময়ের মধ্যে ডেটা দেখতে সহায়তা করবে।
- Current Data দেখতে:
SELECT * FROM Employee
FOR SYSTEM_TIME AS OF '2024-01-01 00:00:00';
- History Data দেখতে:
SELECT * FROM EmployeeHistory;
- Time Period Query: আপনি কোনো নির্দিষ্ট সময়ের মধ্যে ডেটা দেখতে পারেন:
SELECT * FROM Employee
FOR SYSTEM_TIME BETWEEN '2024-01-01' AND '2024-12-31';
5. Temporal Table কনফিগারেশন পরিবর্তন (Modifying Temporal Table Configuration)
SQL Server এ আপনি Temporal Table এর কনফিগারেশন পরিবর্তন করতে পারবেন যদি প্রয়োজন হয়। উদাহরণস্বরূপ, আপনি SYSTEM_VERSIONING বন্ধ করতে পারেন অথবা History Table এর নাম পরিবর্তন করতে পারেন।
- SYSTEM_VERSIONING বন্ধ করা:
ALTER TABLE Employee
SET (SYSTEM_VERSIONING = OFF);
- History Table পরিবর্তন করা:
ALTER TABLE Employee
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.NewEmployeeHistory));
সারাংশ
Temporal Tables SQL Server-এ একটি শক্তিশালী ফিচার যা ডেটার ইতিহাস সংরক্ষণ এবং পূর্ববর্তী ডেটা পুনরুদ্ধারের সুবিধা দেয়। এটি বিশেষভাবে ব্যবহারী যখন ডেটার পরিবর্তন ট্র্যাক করা প্রয়োজন, যেমন লগ, অডিট বা ডেটাবেসের সময়ে পরিবর্তনশীল ডেটা সংরক্ষণ। SYSTEM_VERSIONING ব্যবহারের মাধ্যমে এটি সহজে কার্যকর করা যায় এবং SQL Server-এর মধ্যেই ডেটার অতীত সংস্করণগুলোর উপর কাজ করা সম্ভব হয়।
Historical Data এবং Data Audit Techniques ডেটা ম্যানেজমেন্টের গুরুত্বপূর্ণ উপাদান। এগুলি ডেটার পূর্ববর্তী অবস্থান সংরক্ষণ, পরিবর্তন ট্র্যাকিং এবং ডেটার নির্ভরযোগ্যতা নিশ্চিত করতে ব্যবহৃত হয়। এসব টেকনিকস ডেটার অখণ্ডতা বজায় রাখতে সাহায্য করে এবং সঠিকভাবে ডেটার উন্নয়ন এবং উন্নয়নমূলক সিদ্ধান্ত গ্রহণে সহায়তা করে।
1. Historical Data Management
Historical Data হল ডেটার পূর্ববর্তী অবস্থান বা পুরানো সংস্করণ যা ভবিষ্যতে বিশ্লেষণ বা রেফারেন্সের জন্য সংরক্ষণ করা হয়। এটি সাধারণত কোন ডেটাবেসের পরিবর্তন ইতিহাস ট্র্যাক করতে ব্যবহৃত হয়।
1.1. Historical Data ব্যবস্থাপনা কৌশল
- Data Archiving:
- পুরানো ডেটা একটি পৃথক সিস্টেম বা টেবিলে আর্কাইভ করা হয় যাতে এটি বর্তমানে ব্যবহৃত ডেটার সাথে হস্তক্ষেপ না করে।
- এটি বড় ডেটাবেসের পারফরম্যান্স উন্নত করতে সহায়ক।
Slowly Changing Dimensions (SCD):
- SCD Type 1: পুরানো ডেটাকে আপডেট করা, কোনো ইতিহাস রাখার প্রয়োজন নেই।
- SCD Type 2: পুরানো ডেটার পরিবর্তনসমূহের ইতিহাস রাখা এবং নতুন রেকর্ড সংরক্ষণ করা।
- SCD Type 3: পূর্ববর্তী এক বা দুইটি মানের ইতিহাস রাখা (যেমন, পুরনো এবং বর্তমান মান)।
উদাহরণ (SCD Type 2) :
- Customer Table:
CustomerID,CustomerName,EffectiveDate,EndDate,Status। - History Tracking: প্রতিটি পরিবর্তনের জন্য নতুন রেকর্ড তৈরি হয়।
- Change Data Capture (CDC):
- CDC একটি প্রক্রিয়া যা ডেটাবেসের পরিবর্তনগুলি (ইনসার্ট, আপডেট, ডিলিট) ট্র্যাক করে এবং ইতিহাসে লগ করে।
- এটি ডেটাবেসে প্রতিটি পরিবর্তন চিহ্নিত করতে সাহায্য করে এবং ডেটার গতিশীলতা পর্যবেক্ষণ করা যায়।
Temporal Tables:
- SQL Server-এ System-Versioned Temporal Tables ব্যবহার করে ইতিহাস ট্র্যাক করা যায়। এই ধরনের টেবিল অটোমেটিকভাবে ডেটা পরিবর্তন ট্র্যাক করে এবং পুরানো ডেটা সংরক্ষণ করে।
উদাহরণ:
CREATE TABLE Employee ( EmployeeID INT PRIMARY KEY, Name NVARCHAR(100), Position NVARCHAR(100), Salary DECIMAL(10, 2), ValidFrom DATETIME2 GENERATED ALWAYS AS ROW START, ValidTo DATETIME2 GENERATED ALWAYS AS ROW END, PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo) ) WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.EmployeeHistory));- Version Control Systems:
- Version Control ব্যবহার করা হয় যখন ডেটাবেস স্কিমা বা কনফিগারেশন ফাইলের সংস্করণ ট্র্যাক করতে হয়। এটি মূলত সোর্স কোডের জন্য ব্যবহৃত হয়, তবে ডেটাবেস মডেলিংও এইভাবে ট্র্যাক করা যায়।
2. Data Audit Techniques
Data Audit হল একটি প্রক্রিয়া যার মাধ্যমে ডেটার সঠিকতা, অখণ্ডতা, এবং নিরাপত্তা নিশ্চিত করা হয়। এটি ডেটার ট্র্যাকিং, লগিং, এবং অ্যালার্টিং প্রক্রিয়া অন্তর্ভুক্ত করে যা ডেটাবেসের মান এবং এর ব্যবহারের প্রতি নজর রাখে।
2.1. Data Audit এর মৌলিক উপাদান
- Data Change Tracking (DCT):
- ডেটা পরিবর্তনের তথ্য সংরক্ষণ করা হয় যাতে যেকোনো পরিবর্তন পর্যালোচনা করা যায়।
- সাধারণত, SQL Server-এ Change Tracking বা Change Data Capture (CDC) ফিচার ব্যবহার করা হয়।
Audit Tables:
- ডেটাবেসে Audit Tables তৈরি করা হয় যা ডেটার প্রতিটি পরিবর্তন রেকর্ড করে। এই টেবিলগুলো সাধারণত তিনটি কলাম থাকে: Operation Type (Insert, Update, Delete), Timestamp, এবং Modified By (যে ইউজার ডেটা পরিবর্তন করেছে)।
উদাহরণ:
CREATE TABLE AuditLog ( LogID INT IDENTITY(1,1) PRIMARY KEY, OperationType NVARCHAR(50), TableName NVARCHAR(50), PrimaryKeyValue INT, ModifiedBy NVARCHAR(100), ModifiedDate DATETIME );Trigger-Based Auditing:
- Triggers ব্যবহার করে ডেটাবেসের টেবিলে যখনই ডেটা পরিবর্তন হয় (Insert, Update, Delete), তখন একটি ট্রিগার চালানো হয় এবং সেই পরিবর্তন অডিট টেবিলে রেকর্ড করা হয়।
উদাহরণ:
CREATE TRIGGER tr_AuditInsert ON Employees AFTER INSERT AS BEGIN INSERT INTO AuditLog (OperationType, TableName, PrimaryKeyValue, ModifiedBy, ModifiedDate) SELECT 'INSERT', 'Employees', EmployeeID, USER_NAME(), GETDATE() FROM inserted; END;- Data Validation:
- ডেটার সঠিকতা নিশ্চিত করতে Data Validation টেকনিক্স ব্যবহৃত হয়। এটি ডেটা ইনপুটের সময় সঠিকতা যাচাই করে। উদাহরণস্বরূপ, Check Constraints, Foreign Key Constraints, এবং Triggers দিয়ে ডেটার সঠিকতা যাচাই করা।
Database Logging:
- SQL Server Profiler এবং Extended Events ব্যবহার করে ডেটাবেসের কার্যকলাপ এবং কার্যক্রমের লগ রাখা যায়। এর মাধ্যমে SQL কমান্ড, ট্রানজেকশন এবং অন্যান্য কার্যকলাপ ট্র্যাক করা হয়।
উদাহরণ:
CREATE EVENT SESSION DataChangeTracking ON SERVER ADD EVENT sqlserver.sql_statement_completed WHERE (sqlserver.database_name = 'YourDatabase') ADD TARGET package0.ring_buffer;Data Access Auditing:
- ডেটাবেসে Data Access Auditing দ্বারা নিশ্চিত করা হয় কোন ইউজার কখন এবং কীভাবে ডেটাবেস অ্যাক্সেস করছে। এটি সাধারণত SQL Server Audit ফিচার ব্যবহার করে বাস্তবায়িত করা হয়।
উদাহরণ:
CREATE SERVER AUDIT DataAccessAudit TO FILE (FILEPATH = 'C:\AuditLogs\') WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE); CREATE SERVER AUDIT SPECIFICATION DataAccessAuditSpec FOR SERVER AUDIT DataAccessAudit ADD (SCHEMA_OBJECT_ACCESS_GROUP);
সারাংশ
Historical Data Management এবং Data Audit Techniques ডেটাবেস পরিচালনার জন্য অত্যন্ত গুরুত্বপূর্ণ। Historical Data ট্র্যাকিংয়ের মাধ্যমে পুরনো ডেটা সংরক্ষণ এবং ব্যবহারের ইতিহাস রাখা যায়, যা পরবর্তী সময়ে বিশ্লেষণ বা সিদ্ধান্ত গ্রহণে সহায়তা করে। Data Audit Techniques ডেটার নিরাপত্তা এবং অখণ্ডতা নিশ্চিত করার জন্য গুরুত্বপূর্ণ। এর মাধ্যমে ডেটার প্রতি নজর রাখা, পরিবর্তন ট্র্যাক করা, এবং সঠিকতা যাচাই করা সম্ভব। SQL Server-এ এই সমস্ত কার্যকলাপ বাস্তবায়ন করতে বিভিন্ন ফিচার এবং টেকনিক্স, যেমন Change Data Capture (CDC), Audit Tables, Triggers, এবং SQL Server Audit ব্যবহার করা হয়।
Temporal Tables SQL Server 2016 এবং তার পরবর্তী সংস্করণে একটি গুরুত্বপূর্ণ ফিচার যা ডেটার ইতিহাস ট্র্যাক করতে এবং পরিবর্তনগুলির ইতিহাস বজায় রাখতে সাহায্য করে। এটি বিশেষভাবে ব্যবহৃত হয় যেখানে ডেটা সময় অনুযায়ী পরিবর্তিত হয় এবং সেই পরিবর্তনগুলির একটি ইতিহাস রাখা প্রয়োজন। Temporal Table Maintenance এবং Performance Management হল সেই প্রক্রিয়া যেখানে সময়গত টেবিলগুলির কার্যকারিতা এবং রক্ষণাবেক্ষণ নিশ্চিত করা হয়, যাতে ডেটার স্থায়িত্ব এবং সিস্টেমের পারফরম্যান্স ঠিক রাখা যায়।
1. Temporal Tables কী?
Temporal Tables বা System-Versioned Tables এমন ধরনের টেবিল যা ডেটার সময়ভিত্তিক ইতিহাস ট্র্যাক করে। যখনই কোনো রেকর্ডের ডেটা পরিবর্তিত হয়, তখন পুরনো ডেটা ঐ টেবিলের ইতিহাসের অংশ হিসেবে সংরক্ষিত থাকে এবং নতুন ডেটা বর্তমান টেবিলের অংশ হিসেবে রেকর্ড করা হয়।
1.1. Temporal Tables এর স্ট্রাকচার
- System-Versioned Table: এটি মূল টেবিল যা বর্তমান ডেটা ধারণ করে।
- History Table: এটি ঐ টেবিলের ইতিহাস সংরক্ষণ করে, যেখানে পূর্বের রেকর্ডগুলো রাখা হয়।
যেকোনো ডেটার আপডেট বা ডিলিট হলে, SQL Server স্বয়ংক্রিয়ভাবে সেই পরিবর্তন ইতিহাস টেবিলে সংরক্ষণ করে।
1.2. Temporal Table তৈরি করা
Temporal Table তৈরি করার জন্য PERIOD FOR SYSTEM_TIME কীওয়ার্ড ব্যবহার করা হয়। একটি সাধারণ Temporal Table তৈরি করার উদাহরণ:
CREATE TABLE Employees
(
EmployeeID INT PRIMARY KEY,
Name NVARCHAR(100),
Position NVARCHAR(50),
Salary DECIMAL(18, 2),
ValidFrom DATETIME2 GENERATED ALWAYS AS ROW START HIDDEN NOT NULL,
ValidTo DATETIME2 GENERATED ALWAYS AS ROW END HIDDEN NOT NULL,
PERIOD FOR SYSTEM_TIME (ValidFrom, ValidTo)
)
WITH (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.EmployeesHistory));
এখানে:
ValidFromএবংValidToকলামগুলি ডেটার সময়কাল ট্র্যাক করে।SYSTEM_VERSIONING = ONএ হিষ্ট্রি টেবিলের জন্য dbo.EmployeesHistory তৈরি করা হয়।
2. Temporal Table Maintenance
Temporal Table Maintenance নিশ্চিত করে যে, ডেটাবেসে সময়ভিত্তিক টেবিলগুলো নিয়মিত রক্ষণাবেক্ষণ করা হচ্ছে, যাতে তাদের কার্যকারিতা এবং নিরাপত্তা ঠিক থাকে।
2.1. History Table Management
History Table স্বয়ংক্রিয়ভাবে পূর্ণ হবে যখন কোনো রেকর্ড পরিবর্তিত বা মুছে ফেলা হবে। এই টেবিলের সাইজ বৃদ্ধি পেলে পারফরম্যান্সে নেতিবাচক প্রভাব পড়তে পারে। এর জন্য কিছু নিয়মিত রক্ষণাবেক্ষণ পদ্ধতি রয়েছে:
- Historical Data Cleanup: নিয়মিত পুরনো ইতিহাস ডেটা মুছে ফেলতে হবে, যেমন প্রতি তিন মাস পর পুরনো ডেটা মুছে ফেলা। এতে টেবিলের আকার ছোট থাকবে এবং পারফরম্যান্স ঠিক থাকবে।
DELETE FROM dbo.EmployeesHistory
WHERE ValidTo < '2023-01-01';
- Data Archiving: ইতিহাসের ডেটা অন্য ডেটাবেস বা টেবিলে আর্কাইভ করা যেতে পারে, যাতে মূল ডেটাবেসটি ছোট এবং দ্রুত থাকে।
2.2. History Table Performance Optimization
- Indexing: History table-এ ইনডেক্স তৈরি করা অত্যন্ত গুরুত্বপূর্ণ, কারণ এটি দ্রুত ডেটা অনুসন্ধান এবং রিটার্ন করতে সহায়তা করে। বিশেষ করে,
ValidFromএবংValidToকলামগুলিতে ইনডেক্স তৈরি করা উচিত।
CREATE NONCLUSTERED INDEX IX_EmployeesHistory_ValidFrom
ON dbo.EmployeesHistory (ValidFrom);
- Partitioning: বড় আকারের ইতিহাস টেবিলের ক্ষেত্রে, আপনি partitioning ব্যবহার করতে পারেন, যা ডেটাকে ভাগ করে এবং দ্রুত অনুসন্ধান নিশ্চিত করে।
CREATE PARTITION FUNCTION pf_date (DATETIME2)
AS RANGE RIGHT FOR VALUES ('2022-01-01', '2023-01-01');
CREATE PARTITION SCHEME ps_date
AS PARTITION pf_date
ALL TO ([PRIMARY]);
2.3. System Versioning Configuration
System Versioning নিয়ন্ত্রণ করার জন্য, টেবিলের স্টেটাস পরিবর্তন করা প্রয়োজন হতে পারে, যেমন:
- Disable System Versioning: কিছু সময়ের জন্য যদি ইতিহাস ট্র্যাক করা না চাই, তবে আপনি System Versioning বন্ধ করতে পারেন।
ALTER TABLE Employees SET (SYSTEM_VERSIONING = OFF);
- Enable System Versioning: আবার এটিকে চালু করতে পারেন।
ALTER TABLE Employees SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = dbo.EmployeesHistory));
3. Temporal Table Performance Management
Temporal Table Performance Management হল সেই প্রক্রিয়া যা নিশ্চিত করে যে সময়ভিত্তিক টেবিলগুলির কার্যকারিতা এবং পারফরম্যান্স অপটিমাইজড রয়েছে। এটি সংশ্লিষ্ট টেবিলগুলির যথাযথ রক্ষণাবেক্ষণ, পর্যবেক্ষণ এবং উন্নতির মাধ্যমে করা হয়।
3.1. Query Optimization
- Avoid Full Table Scans: Temporal table এ টেবিল স্ক্যান করা এড়াতে indexing গুরুত্বপূর্ণ। যেমন,
ValidFromএবংValidToকলামগুলিতে ইনডেক্স তৈরি করা, যাতে সময়কাল অনুসারে ডেটা দ্রুত খুঁজে পাওয়া যায়। - Efficient Queries: যখন history table থেকে ডেটা নির্বাচন করা হয়, তখন আপনার কুয়েরি সঠিকভাবে অপটিমাইজ করা উচিত, যাতে অপ্রয়োজনীয় রেকর্ড লোড না হয়।
SELECT EmployeeID, Name, Position, Salary
FROM dbo.Employees FOR SYSTEM_TIME AS OF '2023-01-01'
WHERE EmployeeID = 1;
3.2. Data Purging Strategy
Data Purging বা data cleanup একটি গুরুত্বপূর্ণ স্ট্রাটেজি, যা বড় ইতিহাস টেবিল থেকে পুরনো ডেটা নিয়মিত মুছে ফেলে। এটির জন্য SQL Server Agent ব্যবহার করে সিডিউল করা যায়।
- SQL Server Agent Job তৈরি করে, পুরনো ডেটা (যেমন, 1 বছরের পুরনো) অটোমেটিকভাবে মুছে ফেলার জন্য একটি জব তৈরি করতে পারেন।
EXEC sp_add_job @job_name = 'Purge Old Data';
EXEC sp_add_jobstep @job_name = 'Purge Old Data', @step_name = 'Delete Old History Data',
@command = 'DELETE FROM dbo.EmployeesHistory WHERE ValidTo < DATEADD(YEAR, -1, GETDATE())';
EXEC sp_start_job @job_name = 'Purge Old Data';
3.3. Monitoring and Performance Tuning
- Performance Counters: SQL Server-এর Dynamic Management Views (DMVs) এবং Performance Counters ব্যবহার করে Temporal Table-এর পারফরম্যান্স মনিটর করা যেতে পারে।
SELECT *
FROM sys.dm_db_index_physical_stats (NULL, NULL, NULL, NULL, 'DETAILED');
- Query Store: Query Store ব্যবহার করে, সময়ভিত্তিক টেবিলের উপর চলা কুয়েরি পারফরম্যান্স বিশ্লেষণ করা যেতে পারে। এতে সময়ের সাথে পারফরম্যান্সে কোনো সমস্যা ঘটলে সেটি চিহ্নিত করা সহজ হয়।
সারাংশ
Temporal Tables ডেটাবেসে সময়ভিত্তিক ডেটা সংরক্ষণ এবং ইতিহাস ট্র্যাকিংয়ের জন্য অত্যন্ত গুরুত্বপূর্ণ ফিচার। এর মাধ্যমে আমরা ডেটার পূর্ববর্তী অবস্থাগুলিকে সহজে রক্ষণাবেক্ষণ করতে পারি। তবে, এর কার্যকারিতা নিশ্চিত করতে এবং পারফরম্যান্স বজায় রাখতে history table management, indexing, partitioning, এবং data cleanup কৌশলগুলো প্রয়োগ করা জরুরি। Proper maintenance এবং performance tuning করলে Temporal Tables SQL Server-এর একটি শক্তিশালী এবং কার্যকরী ফিচার হয়ে ওঠে।
Read more